home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
3D Game Programming All in One
/
3D Game Programming All in One Disc.iso
/
3D2E
/
RESOURCES
/
CH6
/
EMAGA6
/
control
/
client
/
misc
/
connection.cs
< prev
next >
Wrap
Text File
|
2006-07-02
|
5KB
|
155 lines
//============================================================================
// control/client/misc/connection.cs
//
// Copyright (c) 2003 Kenneth C. Finney
//============================================================================
// Functions dealing with Connecting to a server
//-----------------------------------------------------------------------------
// Server Connection Error
//-----------------------------------------------------------------------------
addMessageCallback( 'MsgConnectionError', handleConnectionErrorMessage );
function handleConnectionErrorMessage(%msgType, %msgString, %msgError)
{
// On Connect the server transmits a message to display if there
// are any problems with the Connection. Most Connection Errors
// are game version differences, so hopefully the server message
// will tell us where to get the latest version of the game.
$ServerConnectionErrorMessage = %msgError;
}
//----------------------------------------------------------------------------
// GameConnection client callbacks
//----------------------------------------------------------------------------
function GameConnection::InitialControlSet(%this)
//----------------------------------------------------------------------------
// This callback is called directly from inside the Torque Engine
// during server initialization.
//----------------------------------------------------------------------------
{
Echo ("Setting Initial Control Object");
// The first control object has been set by the server
// and we are now ready to go.
Canvas.SetContent(PlayerInterface);
}
function GameConnection::setLagIcon(%this, %state)
{
}
function GameConnection::onConnectionAccepted(%this)
{
}
function GameConnection::onConnectionTimedOut(%this)
{
// Called when an established Connection times out
disConnectedCleanup();
MessageBoxOK( "TIMED OUT", "The server Connection has timed out.");
}
function GameConnection::onConnectionDropped(%this, %msg)
{
// Established Connection was dropped by the server
disConnectedCleanup();
MessageBoxOK( "DISConnect", "The server has dropped the Connection: " @ %msg);
}
function GameConnection::onConnectionError(%this, %msg)
{
// General Connection Error, usually raised by ghosted objects
// initialization problems, such as missing files. We'll display
// the server's Connection Error message.
disConnectedCleanup();
MessageBoxOK( "DISConnect", $ServerConnectionErrorMessage @ " (" @ %msg @ ")" );
}
//----------------------------------------------------------------------------
// Connection Failed Events
//----------------------------------------------------------------------------
function GameConnection::onConnectRequestRejected( %this, %msg )
{
switch$(%msg)
{
case "CR_INVALID_PROTOCOL_VERSION":
%Error = "Incompatible protocol version: Your game version is not compatible with this server.";
case "CR_INVALID_Connect_PACKET":
%Error = "Internal Error: badly formed network packet";
case "CR_YOUAREBANNED":
%Error = "You are not allowed to play on this server.";
case "CR_SERVERFULL":
%Error = "This server is full.";
case "CHR_PASSWORD":
// XXX Should put up a password-entry dialog.
if ($Client::Password $= "")
MessageBoxOK( "REJECTED", "That server requires a password.");
else {
$Client::Password = "";
MessageBoxOK( "REJECTED", "That password is incorrect.");
}
return;
case "CHR_PROTOCOL":
%Error = "Incompatible protocol version: Your game version is not compatible with this server.";
case "CHR_CLASSCRC":
%Error = "Incompatible game classes: Your game version is not compatible with this server.";
case "CHR_INVALID_CHALLENGE_PACKET":
%Error = "Internal Error: Invalid server response packet";
default:
%Error = "Connection Error. Please try another server. Error code: (" @ %msg @ ")";
}
disConnectedCleanup();
MessageBoxOK( "REJECTED", %Error);
}
function GameConnection::onConnectRequestTimedOut(%this)
{
disConnectedCleanup();
MessageBoxOK( "TIMED OUT", "Your Connection to the server timed out." );
}
//-----------------------------------------------------------------------------
// DisConnect
//-----------------------------------------------------------------------------
function Disconnect()
{
// Delete the Connection if it's still there.
if (IsObject(ServerConnection))
ServerConnection.delete();
disConnectedCleanup();
// Call destroyServer in case we're hosting
destroyServer();
}
function disConnectedCleanup()
{
// Clear misc script stuff
HudMessageVector.clear();
// Back to the launch screen
Canvas.setContent(MenuScreen);
// Dump anything we're not using
ClearTextureHolds();
PurgeResources();
}